package com.cspg.ssss.util;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;

public class WordExUtil {
    private static final Logger log = LoggerFactory.getLogger(WordExUtil.class);
    /**
     * 导出公司模板
     * @param
     * @return
     * @throws Exception
     */
    public static void createDoc(Map<String,Object> dataMap, HttpServletResponse response) throws Exception {
        //dataMap 要填入模本的数据文件
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet，classpath，数据库装载，
        //这里我们的模板是放在template包下面
        log.info("进入生成模板 ......++ ");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;" + " filename=" + "test.doc");
        File file=new File("");
        String abspath= file.getCanonicalPath();
        Configuration configuration = new Configuration(new Version("2.3.28"));
        configuration.setDefaultEncoding("UTF-8");
        log.info("拿到模板 ......++ ");
//        本地
//        configuration.setDirectoryForTemplateLoading(new File(abspath+"/src/main/resources/templates"));
//        企业微信
//        configuration.setDirectoryForTemplateLoading(new File("/root/java/moban"));
//        线上
        configuration.setDirectoryForTemplateLoading(new File("/home/app/moban"));
        Template t = null;
        try {
            //test.ftl为要装载的模板
            log.info("写入模板 ......++ ");
            t = configuration.getTemplate("gsmuban.ftl");
            log.info("写入完成 ......++ ");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //输出文档路径及名称
        //File outFile = new File("D:\\test.doc");
        log.info("返回 ......++ ");
        Writer out = response.getWriter();
 /*       FileOutputStream fos = null;*/
        //fos = new FileOutputStream(outFile);
        //OutputStreamWriter oWriter = new OutputStreamWriter(fos, "UTF-8");
        //这个地方对流的编码不可或缺，使用main（）单独调用时，应该可以，但是如果是web请求导出时导出后word文档就会打不开，并且包XML文件错误。主要是编码格式不正确，无法解析。
        //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
        //out = new BufferedWriter(oWriter);

        try {
            log.info("写入模板 ......++ ");
            t.process(dataMap, out);
            log.info("写出模板 ......++ ");
            out.close();/*
            fos.close();*/
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 导出单位模板
     * @param
     * @return
     * @throws Exception
     */
    public static void createdwDoc(Map<String,Object> dataMap, HttpServletResponse response) throws Exception {
        //dataMap 要填入模本的数据文件
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet，classpath，数据库装载，
        //这里我们的模板是放在template包下面
        log.info("进入生成模板 ......++ ");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;" + " filename=" + "test.doc");
        File file=new File("");
       String abspath= file.getCanonicalPath();
        Configuration configuration = new Configuration(new Version("2.3.28"));
        configuration.setDefaultEncoding("UTF-8");
        log.info("拿到模板 ......++ ");
//        本地
//        configuration.setDirectoryForTemplateLoading(new File(abspath+"/src/main/resources/templates"));
//        企业微信
//        configuration.setDirectoryForTemplateLoading(new File("/root/java/moban"));
//        线上
        configuration.setDirectoryForTemplateLoading(new File("/home/app/moban"));
        Template t = null;
        try {
            //test.ftl为要装载的模板
            log.info("写出模板 ......++ ");
            t = configuration.getTemplate("dwmoban.ftl");
            log.info("写出模板2 ......++ ");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //输出文档路径及名称
        //File outFile = new File("D:\\test.doc");
        log.info("写出模板2 ......++ ");
        Writer out = response.getWriter();
        /*       FileOutputStream fos = null;*/
        //fos = new FileOutputStream(outFile);
        //OutputStreamWriter oWriter = new OutputStreamWriter(fos, "UTF-8");
        //这个地方对流的编码不可或缺，使用main（）单独调用时，应该可以，但是如果是web请求导出时导出后word文档就会打不开，并且包XML文件错误。主要是编码格式不正确，无法解析。
        //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
        //out = new BufferedWriter(oWriter);

        try {
            t.process(dataMap, out);
            out.close();/*
            fos.close();*/
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
